'\" te
.\" Copyright (c) 2004, Sun Microsystems, Inc. All Rights Reserved.
.\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License.
.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.  See the License for the specific language governing permissions and limitations under the License.
.\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
.TH CT_EVENT_READ 3CONTRACT "April 9, 2016"
.SH NAME
ct_event_read, ct_event_read_critical, ct_event_reset, ct_event_reliable,
ct_event_free, ct_event_get_flags, ct_event_get_ctid, ct_event_get_evid,
ct_event_get_type, ct_event_get_nevid, ct_event_get_newct \- common contract
event functions
.SH SYNOPSIS
.LP
.nf
cc [ \fIflag\fR\&.\|.\|. ] \fIfile\fR\&.\|.\|. \fB-D_LARGEFILE64_SOURCE\fR \fB -lcontract \fR [ \fIlibrary\fR\&.\|.\|. ]
#include <libcontract.h>

\fBint\fR \fBct_event_read\fR(\fBint\fR \fIfd\fR, \fBct_evthdl_t *\fR\fIevthndlp\fR);
.fi

.LP
.nf
\fBint\fR \fBct_event_read_critical\fR(\fBint\fR \fIfd\fR, \fBct_evthdl_t *\fR\fIevthndlp\fR);
.fi

.LP
.nf
\fBint\fR \fBct_event_reset\fR(\fBint\fR \fIfd\fR);
.fi

.LP
.nf
\fBint\fR \fBct_event_reliable\fR(\fBint\fR \fIfd\fR);
.fi

.LP
.nf
\fBvoid\fR \fBct_event_free\fR(\fBct_evthdl_t\fR \fIevthndl\fR);
.fi

.LP
.nf
\fBctid_t\fR \fBct_event_get_ctid\fR(\fBct_evthdl_t\fR \fIevthndl\fR);
.fi

.LP
.nf
\fBctevid_t\fR \fBct_event_get_evid\fR(\fBct_evthdl_t\fR \fIevthndl\fR);
.fi

.LP
.nf
\fBuint_t\fR \fBct_event_get_flags\fR(\fBct_evthdl_t\fR \fIevthndl\fR);
.fi

.LP
.nf
\fBuint_t\fR \fBct_event_get_type\fR(\fBct_evthdl_t\fR \fIevthndl\fR);
.fi

.LP
.nf
\fBint\fR \fBct_event_get_nevid\fR(\fBct_evthdl_t\fR \fIevthndl\fR, \fBctevid_t *\fR\fIevidp\fR);
.fi

.LP
.nf
\fBint\fR \fBct_event_get_newct\fR(\fBct_evthdl_t\fR \fIevthndl\fR, \fBctid_t *\fR\fIctidp\fR);
.fi

.SH DESCRIPTION
.LP
These functions operate on contract event endpoint file descriptors obtained
from the \fBcontract\fR(5) file system and event object handles returned by
\fBct_event_read()\fR and \fBct_event_read_critical()\fR.
.sp
.LP
The \fBct_event_read()\fR function reads the next event from the queue
referenced by the file descriptor \fIfd\fR and initializes the event object
handle pointed to by \fIevthndlp\fR. After a successful call to
\fBct_event_read()\fR, the caller is responsible for calling
\fBct_event_free()\fR on this event object handle when it has finished using
it.
.sp
.LP
The \fBct_event_read_critical()\fR function behaves like \fBct_event_read()\fR
except that it reads the next critical event from the queue, skipping any
intermediate events.
.sp
.LP
The \fBct_event_reset()\fR function resets the location of the listener to the
beginning of the queue. This function can be used to re-read events, or read
events that were sent before the event endpoint was opened. Informative and
acknowledged critical events, however, might have been removed from the queue.
.sp
.LP
The \fBct_event_reliable()\fR function indicates that no event published to the
specified event queue should be dropped by the system until the specified
listener has read the event. This function requires that the caller have the
{\fBPRIV_CONTRACT_EVENT\fR} privilege in its effective set.
.sp
.LP
The \fBct_event_free()\fR function frees any storage associated with the event
object handle specified by \fIevthndl\fR.
.sp
.LP
The \fBct_event_get_ctid()\fR function returns the ID of the contract that sent
the specified event.
.sp
.LP
The \fBct_event_get_evid()\fR function returns the ID of the specified event.
.sp
.LP
The \fBct_event_get_flags()\fR function returns the event flags for the
specified event. Valid event flags are:
.sp
.ne 2
.na
\fB\fBCTE_INFO\fR\fR
.ad
.RS 12n
The event is an informative event.
.RE

.sp
.ne 2
.na
\fB\fBCTE_ACK\fR\fR
.ad
.RS 12n
The event has been acknowledged (for critical and negotiation messages).
.RE

.sp
.ne 2
.na
\fB\fBCTE_NEG\fR\fR
.ad
.RS 12n
The message represents an exit negotiation.
.RE

.sp
.LP
The \fBct_event_get_type()\fR function reads the event type. The value is one
of the event types described in \fBcontract\fR(5) or the contract type's manual
page.
.sp
.LP
 The \fBct_event_get_nevid()\fR function reads the negotiation ID from an
\fBCT_EV_NEGEND\fR event.
.sp
.LP
The \fBct_event_get_newct()\fR function obtains the ID of the contract created
when the negotiation referenced by the \fBCT_EV_NEGEND\fR event succeeded. If
no contract was created, \fIctidp\fR will be 0.  If the operation was
cancelled, *\fIctidp\fR will equal the ID of the existing contract.
.SH RETURN VALUES
.LP
Upon successful completion, \fBct_event_read()\fR,
\fBct_event_read_critical()\fR, \fBct_event_reset()\fR,
\fBct_event_reliable()\fR, \fBct_event_get_nevid()\fR, and
\fBct_event_get_newct()\fR return 0. Otherwise, they return a non-zero error
value.
.sp
.LP
The \fBct_event_get_flags()\fR, \fBct_event_get_ctid()\fR,
\fBct_event_get_evid()\fR, and \fBct_event_get_type()\fR functions return data
as described in the DESCRIPTION.
.SH ERRORS
.LP
The \fBct_event_reliable()\fR function will fail if:
.sp
.ne 2
.na
\fB\fBEPERM\fR\fR
.ad
.RS 9n
The caller does not have {\fBPRIV_CONTRACT_EVENT\fR} in its effective set.
.RE

.sp
.LP
The \fBct_event_read()\fR and \fBct_event_read_critical()\fR functions will
fail if:
.sp
.ne 2
.na
\fB\fBEAGAIN\fR\fR
.ad
.RS 10n
The event endpoint was opened \fBO_NONBLOCK\fR and no applicable events were
available to be read.
.RE

.sp
.LP
The \fBct_event_get_nevid()\fR and \fBct_event_get_newct()\fR functions
will fail if:
.sp
.ne 2
.na
\fB\fBEINVAL\fR\fR
.ad
.RS 10n
The \fIevthndl\fR argument is not a \fBCT_EV_NEGEND\fR event object.
.RE

.SH ATTRIBUTES
.LP
See \fBattributes\fR(7) for descriptions of the following attributes:
.sp

.sp
.TS
box;
c | c
l | l .
ATTRIBUTE TYPE	ATTRIBUTE VALUE
_
Interface Stability	Evolving
_
MT-Level	Safe
.TE

.SH SEE ALSO
.LP
.BR libcontract (3LIB),
.BR contract (5),
.BR attributes (7),
.BR lfcompile (7)
